Site cover image

Site icon imageSen(Qian)’s Memo

This website is Donglin Qian (Torin Sen)’s memo, especially about machine learning papers and competitive programming.

2020-ICML-[Self-PU]Self Boosted and Calibrated Positive-Unlabeled Training

https://arxiv.org/abs/2006.11280

Introduction

既存のPU Learningでは、代理タスクなどの補助を含む自己教師あり学習は考えられてなかった。この論文では以下のような「自己ブースト」を含んでいる。

  • Unlabeledの中から信頼できるものをイテレーションが進むにつれて選ぶ。
  • 信頼できないデータについてはMeta Learningの知見でCalibrationをした。
  • Teacher, Student Modelを同時に学習させている。

Related Work

PU Learningはわかっているので飛ばす。

Self-paced Learning

カリキュラム学習の一種類で、訓練サンプルを学習ヒストリーをもとに動的に生成するというもの。これにより、最初は簡単で徐々に難しくなるという目標を実現させたい。

具体的には学習の初期で自信のあるサンプルを学習に使い、学習が進むにつれて自信がないサンプルも学習に使っていく

Noisy LabelにありがちなSmall Loss Trickとは考えが真逆。こっちは学習が進むにつれて自信のあるサンプルだけ見てる。

Self-supervised Learning

Unlabeledの中から、これっぽいとおもうラベルであるPseudo Labelを付与して学習を進めていくもの。これの一種として、データにのいずなどの変換を増やしていくData Augmentationなどがある。

Tarvainen, A. and Valpola, H. Mean teachers are better role models: Weight-averaged consistency targets improve semi-supervised deep learning results. In NeurIPS, 2017.

これは、Teacher, Studentの2つの同じネットワーク構造をした学習器を用意して、

  • Studentは普通に学習をする。
  • TeacherはStudent Modelの予測値をもとに、Unlabeledのデータに対してPseudo Labelを生成する。これをStudent Modelの学習にも使っていく。
    • Teacherのパラメタ更新は、Studentの重みと今のTeacherの重みの移動平均で計算したものである。
  • パラメタ自体移動平均で更新しているとはいえ、最終的な出力もStudent ModelとTeacher Modelであまりずれてほしくない。この時以下のMSEも損失に加える。
LMSE=1Ni=1NfT(xi)fS(xi)2L_{MSE} = \frac{1}{N} \sum_{i=1}^N || f_T(\mathbf{x}_i) - f_S(\mathbf{x}_i) ||^2

Proposed Method

流れとしては、

  1. まずUから自信のあるデータを選んでPseudo Labelをつけて、教師あり学習する
  2. Meta Learningを通して、自信のないデータに対する損失関数を調節する。
  3. 異なる学習ペースを持つ同時に訓練するネットワークに一貫性の損失を導入。

これは先ほど紹介したMean Teacherから啓発を受けているかな。

アルゴリズムの流れは以下のように、訓練段階によって違うことをやる。

Image in a image block

Self-paced PU Learning

Memorization Effectによって、最初は簡単な特徴を持つ例を学習していく。

モデルggと入力x\mathbf{x}、ラベルyyがあるとする。モデルの出力から、確率をcalibrationする感じ。

Pr(y=+1x)=f(g(x))Pr(y=+1|\mathbf{x}) = f(g(\mathbf{x}))

このように計算した確率を信頼度だとして、一番信頼度が高いPositiveやNegativeと判定されたUnlabeledの中のデータを上から順にいくつか選び(同数選ぶことでbalanced長く種がおのずとできる)、Pseudo Labelを付与してからDP,DUD_P, D_Uから除去してDtrustD_{trust}に入れる

そして、DtrustD_{trust}でPN Learningを行い(Cross-Entropy Loss)、DPD_PDUD_UでnnPUを行う

Image in a image block
Dynamic Rate Sampling

最初に簡単なデータを、進むにつれて難しいデータを学ばせるために、DtrustD_{trust}に加える敷居を動的に決めるようなフレームワークを考えた。

線形に増加して、割合は最初は10%から最大で40%まで増やす。

なお、Self-paced PU Learningをする前に、Warm-upを10エポック行い、その時はXXXで学習する。

In-and-out Trusted Set

DtrustD_{trust}には入っていく一方のみならず、不適格だと思われるデータをDP,DUD_P, D_Uに戻すこともある。データを加えるたびに評価し、信頼度が低いサンプルだったら取り出している。

Soft-labels

Pseudo Labelとしては、Hard Labelではなく識別器の予測結果のCalibrationのf(g(x))f(g(\mathbf{x}))をそのまま使っている。

Self-Calibrated Loss Reweighting

先ほどのLSPL_{SP}に手を加えたものとして、nnPUの部分でUnlabeledについて、nnPUの式のみならず、Soft Pseudo Labelを用いたCross Entropyも使うように拡張する。この時、以下のようにそれぞれの重みwi,1,wi,2w_{i,1}, w_{i,2}を置く。この重みをうまく制御することで、学習をよくしていきたい。

Image in a image block

この重みについては以下の手順で学習していく。

  1. wi\mathbf{w}_iを使った損失関数を用いて、勾配降下法で更新する。
  2. 訓練に使わない、Validation Setに対してまず仮の重みui\mathbf{u}_iを計算する。
    1. 重みを0に固定しての勾配を求めるのは、ある初期化された基準点だからという考え。
    2. wi\mathbf{w}_iはこの右辺には直接かかわっていないが、クロスエントロピーを計算するためのパラメタは1で更新している。ここで、wi\mathbf{w}_iを使っておりその時を使っているので、Validation Set学習の結果で更新している。
    3. 重みが0であるときの勾配が0ならば更新は止まるが、これは重み点が0において最適な値を見つけたから?でも重みは0として使ってるわけでもないし不思議な判定だ…
ui=wi1mj=1mLCE(xjv,yjv)wi=0\mathbf{u}_i = -\frac{\partial }{\partial \mathbf{w}_i } \frac{1}{m} \sum_{j=1}^m L_{CE}(\mathbf{x}_j^v, y_j^v) | _{\mathbf{w_i = 0}}
  1. w~i=max(ui,0)\tilde{\mathbf{w}}_i = \max(\mathbf{u}_i, 0)このように、負のGradientにならないようにClipして最後に新しいGradientの要素の和は1となるように正規化して、これをwi+1\mathbf{w}_{i+1}として使う。

ただ、このままでは使えない。DUD_U(信頼できるサンプルを抜かれた後)に対してそのまま重みwi\mathbf{w}_iを学習させると、Unlabeled自体学習が不安定なのもあって重みwi\mathbf{w}_iの制限をしている。

Image in a image block

これは、重みを小さい順から並べて、和がγn\gamma nをギリギリ超えない個数kkTTとして

  • その重みが小さい順からのTT個はそのままのwi\mathbf{w}_iを使う。
  • それ以外のものは、クロスエントロピーの項を消して、第二項だけ使う。

これらを考えてまとめたものは以下のようなものである。LSPL_{SP}の改善版みたい。

Image in a image block

Self-supervised Consistency via Distillation

どうやら複数個のモデルを同時に学習していくらしい。

学習ペースが違うモデルの間の出力の一貫性と、モデルのパラメタを移動平均でとることで時間の前後での一貫性を保つらしい。

Consistency for Different Learning Paces: Making a Pair of Students

同じネットワークを2つ用意して、同じミニバッチで訓練をしていく。違うのは初期値と、自信があると判断する閾値だけ。なので、DtrustD_{trust}はそれぞれ選ぶ量が違うので違ってくる。

このように学習のペースが違ってくるが、その2つのネットワークの間でできるだけ同じペースを保って学習してほしい。これを制御するために、2つのネットワークg1,g2g_1, g_2に対してそれぞれ存在するDtrust1,Dtrust2D_{trust}^1, D_{trust}^2について、二乗誤差を計算できる。

ただし、すべてのサンプルについて計算するのではなく、nnPUのリスクが大きい(信頼度が低い)サンプルについてのみ、学習のペースをそろえてほしい。

Image in a image block
Consistency for Moving Averaged Weights: Adding Teachers to Distill

2つのg1,g2g_1, g_2に対して、パラメタΘ1,Θ2\Theta_1, \Theta_2である教師ネットワークG1,G2G_1, G_2を追加する。これもg1,g2g_1, g_2と同じ構造である。G1,G2G_1, G_2は以下のように更新する。つまり、学生ネットワークのパラメタを移動平均させただけ

Image in a image block

(これ教師ネットワークといってるけど別にこれの出力でラベルとかつけてない)

そして、移動平均のパラメタを使うG1G_1g1g_1らの予測結果もずれないでほしいというもの。

Image in a image block

全体的には損失は以下のようになる。

Image in a image block

訓練の流れとしては、

  • 10エポックまではWarm Up
  • 10から50エポックまではSelf-paced TrainingやSelf-Calibrated Loss Reweightingをする。
  • 50から250エポックは、最後に述べたDistillationだけをする。

Experiment

MNISTとCIFAR-10とAlzheimerで学習した。

MNISTでは奇数と偶数でPUに分けて、CIFAR-10では乗り物の0, 1, 8, 9とそれ以外を分けている。

CIFAR-10のAblation Studyはこちら。

Image in a image block

これは全体的な実験結果

Image in a image block

Alzheimerのデータセットは以下のようになった。

Image in a image block